Guava Validators

Java Technologies - গুয়াভা (Guava)
137
137

গুয়াভা (Guava) লাইব্রেরি Java প্রোগ্রামে ডেটা ভ্যালিডেশন (data validation) খুব সহজ করে তোলে। গুয়াভা বিশেষভাবে Preconditions ক্লাসের মাধ্যমে ইনপুট ভ্যালিডেশন পরিচালনা করার সুযোগ দেয়, তবে এই লাইব্রেরিতে কিছু অতিরিক্ত ভ্যালিডেটরও রয়েছে যেগুলি বিশেষভাবে কার্যকরী। এই ভ্যালিডেটরগুলি ব্যবহার করে আপনি ইনপুট ডেটার সঠিকতা এবং কনসিস্টেন্সি নিশ্চিত করতে পারেন। এখানে গুয়াভা ভ্যালিডেটরের কিছু গুরুত্বপূর্ণ ক্লাস এবং তাদের ব্যবহার তুলে ধরা হলো।


Guava Validators

গুয়াভা লাইব্রেরিতে একটি Validator ক্লাস সরাসরি অন্তর্ভুক্ত করা না হলেও, কিছু ফিচার এবং ইউটিলিটি আছে যা বিভিন্ন ধরনের ভ্যালিডেশন (যেমন, Preconditions, CharMatcher, Range ইত্যাদি) সম্পাদন করতে সাহায্য করে। এই ক্লাসগুলি সাধারণত ইভ্যালুয়েশন এবং ভ্যালিডেশন প্রক্রিয়ায় ব্যবহার করা হয়। নীচে আমরা গুয়াভার ভ্যালিডেটরের মূল ধারণাগুলি এবং ব্যবহারের উদাহরণ আলোচনা করব।


১. Preconditions

Preconditions ক্লাসের বিভিন্ন মেথড (যেমন, checkNotNull(), checkArgument(), checkState()) ইনপুট ভ্যালিডেশন সহজ করে তোলে। এই মেথডগুলির মাধ্যমে আপনি কোডের মধ্যে বিভিন্ন শর্ত পরীক্ষা করতে পারেন এবং যদি কোনো শর্ত পূরণ না হয়, তবে এটি ত্রুটি (exception) থ্রো করবে।

উদাহরণ:

import com.google.common.base.Preconditions;

public class PreconditionsExample {
    public static void main(String[] args) {
        String username = null;
        
        // checkNotNull() ব্যবহার করে null চেক করা
        username = Preconditions.checkNotNull(username, "Username cannot be null");
    }
}

এখানে, checkNotNull() মেথড ব্যবহার করা হয়েছে যা নিশ্চিত করবে যে username null নয়। যদি username null হয়, তাহলে এটি NullPointerException থ্রো করবে।


২. CharMatcher

CharMatcher একটি বিশেষ ক্লাস যা অক্ষরের ভ্যালিডেশন এবং ম্যানিপুলেশন করতে ব্যবহৃত হয়। এটি বিভিন্ন ধরনের অক্ষরের মেলা বা ম্যাচিংয়ের জন্য শক্তিশালী টুল সরবরাহ করে, যেমন: নির্দিষ্ট চরিত্রের উপস্থিতি চেক করা, অক্ষর পরিষ্কার করা, অথবা ভ্যালিড অক্ষর তালিকা তৈরি করা।

উদাহরণ:

import com.google.common.base.CharMatcher;

public class CharMatcherExample {
    public static void main(String[] args) {
        String input = "Hello123";
        
        // CharMatcher ডিগিট চেক করা
        boolean hasDigit = CharMatcher.digit().matchesAnyOf(input);
        System.out.println("Has digit: " + hasDigit);  // true
    }
}

এখানে, CharMatcher.digit().matchesAnyOf() ব্যবহার করে আমরা যাচাই করছি যে স্ট্রিংটিতে কোনো ডিজিট আছে কিনা। এটি true রিটার্ন করবে কারণ "Hello123"-এ ডিজিট রয়েছে।


৩. Range

Range ক্লাসটি নির্দিষ্ট পরিসরের মধ্যে ভ্যালিডেশন পরিচালনা করতে ব্যবহৃত হয়। এটি সাধারণত সংখ্যার সীমা চেক করতে সাহায্য করে, যেমন কোন একটি সংখ্যার ভ্যালু নির্দিষ্ট পরিসরের মধ্যে আছে কিনা।

উদাহরণ:

import com.google.common.collect.Range;

public class RangeExample {
    public static void main(String[] args) {
        int age = 25;
        
        // Range ব্যবহার করে বয়সের পরিসর চেক করা
        Range<Integer> validAgeRange = Range.closed(18, 65);
        boolean isValidAge = validAgeRange.contains(age);
        
        System.out.println("Is valid age: " + isValidAge);  // true
    }
}

এখানে, Range.closed() ব্যবহার করা হয়েছে যা একটি বন্ধ পরিসর তৈরি করে। তারপর contains() মেথডের মাধ্যমে যাচাই করা হয়েছে যে age এই পরিসরের মধ্যে আছে কিনা। এটি true রিটার্ন করবে কারণ 25 বয়স 18 থেকে 65 এর মধ্যে পড়ে।


৪. Validate Utility Methods (Custom Validation)

গুয়াভা লাইব্রেরি নিজে সরাসরি কোনো কাস্টম ভ্যালিডেটরের সমাধান প্রদান না করলেও, আপনি নিজেই Preconditions এবং অন্যান্য ইউটিলিটি মেথড ব্যবহার করে কাস্টম ভ্যালিডেশন তৈরি করতে পারেন। উদাহরণস্বরূপ, কোনো ইমেইল ঠিকানা বা ফোন নম্বরের সঠিকতা যাচাই করতে CharMatcher বা Preconditions এর সঙ্গে রেগুলার এক্সপ্রেশন ব্যবহার করা যেতে পারে।

উদাহরণ:

import com.google.common.base.Preconditions;
import com.google.common.base.CharMatcher;

public class CustomValidatorExample {
    public static void main(String[] args) {
        String phoneNumber = "+1234567890";
        
        // Phone number validation
        Preconditions.checkArgument(CharMatcher.digit().matchesAllOf(phoneNumber), "Invalid phone number format");
        
        System.out.println("Valid phone number: " + phoneNumber);
    }
}

এখানে, Preconditions.checkArgument() এবং CharMatcher.digit().matchesAllOf() ব্যবহার করে ফোন নম্বরের ভ্যালিডেশন করা হয়েছে, যা নিশ্চিত করবে যে ফোন নম্বরে শুধুমাত্র ডিজিট থাকবে।


সারাংশ

গুয়াভা (Guava) লাইব্রেরি ডেটা ভ্যালিডেশনের জন্য বিভিন্ন শক্তিশালী টুল সরবরাহ করে। Preconditions ইনপুট ভ্যালিডেশন করার জন্য খুবই কার্যকরী, CharMatcher অক্ষরের সাথে সম্পর্কিত ভ্যালিডেশন এবং ম্যানিপুলেশন করতে সাহায্য করে, এবং Range ক্লাসটি সংখ্যার পরিসর যাচাই করতে ব্যবহৃত হয়। এই ফিচারগুলো আপনার Java অ্যাপ্লিকেশনগুলিতে ডেটা ভ্যালিডেশনকে দ্রুত এবং কার্যকরীভাবে সম্পাদন করতে সহায়ক।


Content added By

Input Validation এর জন্য Validators এর ব্যবহার

174
174

Guava লাইব্রেরি Java-তে ইনপুট ভ্যালিডেশন সহজ করতে Validators ক্লাসের মতো শক্তিশালী টুল সরবরাহ করে। ইনপুট ভ্যালিডেশন এমন একটি প্রক্রিয়া যেখানে আমরা নিশ্চিত করি যে ব্যবহারকারী বা সিস্টেমের কাছ থেকে পাওয়া ইনপুট সঠিক এবং নির্দিষ্ট শর্ত পূর্ণ করে। Guava লাইব্রেরি ইনপুট ভ্যালিডেশনের জন্য Preconditions এবং অন্যান্য ইউটিলিটি ক্লাস সরবরাহ করে, যা ডেভেলপারদের এই কাজ সহজে করতে সহায়তা করে।


Guava Validators: Input Validation এর জন্য ব্যবহৃত ইউটিলিটি

Guava এর Preconditions এবং Validators ক্লাসগুলো মূলত ইনপুট ভ্যালিডেশন এবং শর্ত যাচাই করার জন্য ব্যবহৃত হয়। এগুলি ব্যবহার করে আপনি সহজেই ইনপুট যাচাই করতে পারেন এবং ইনপুটের ভুল থাকলে ব্যতিক্রম (exception) ছুড়ে তা ধরতে পারেন।


Preconditions ক্লাস: ইনপুট ভ্যালিডেশন

Guava লাইব্রেরির Preconditions ক্লাসটি প্রধানত বিভিন্ন ইনপুট যাচাই করার জন্য ব্যবহৃত হয়। এটি চেক করে যে ইনপুট কিছু নির্দিষ্ট শর্ত পূর্ণ করছে কিনা। যদি শর্ত পূর্ণ না হয়, তবে এটি একটি ব্যতিক্রম (exception) ছুঁড়ে।

Preconditions ক্লাসের কিছু জনপ্রিয় মেথড:

  1. checkArgument(): আর্গুমেন্ট (যেমন মেথডের ইনপুট প্যারামিটার) যাচাই করতে ব্যবহৃত হয়।
  2. checkNotNull(): কোনো অবজেক্ট বা ভ্যালু null না হওয়া নিশ্চিত করতে ব্যবহৃত হয়।
  3. checkState(): অবস্থা (state) যাচাই করতে ব্যবহৃত হয়।
  4. checkElementIndex(): ইনডেক্সের সীমানা যাচাই করতে ব্যবহৃত হয়।

Preconditions ব্যবহার করে ইনপুট ভ্যালিডেশন

1. checkArgument() ব্যবহার করা

ধরা যাক, একটি মেথডে আপনি একটি বয়েস (age) গ্রহণ করছেন এবং চাইছেন যে এটি একটি পজিটিভ মান হোক:

import com.google.common.base.Preconditions;

public class InputValidationExample {
    public static void main(String[] args) {
        int age = -5;

        // checkArgument() ব্যবহার করে বয়েস যাচাই করা
        Preconditions.checkArgument(age > 0, "Age must be positive: %s", age);
    }
}

ব্যাখ্যা:

  • এখানে, checkArgument() মেথডটি যাচাই করেছে যে বয়েস (age) পজিটিভ কিনা। যদি বয়েস পজিটিভ না হয়, তবে এটি একটি IllegalArgumentException ছোড়বে এবং ত্রুটির বার্তা প্রদর্শন করবে।

আউটপুট:

Exception in thread "main" java.lang.IllegalArgumentException: Age must be positive: -5

2. checkNotNull() ব্যবহার করা

একটি সাধারণ ইনপুট ভ্যালিডেশন উদাহরণ যেখানে আমরা null চেক করছি:

import com.google.common.base.Preconditions;

public class InputValidationExample {
    public static void main(String[] args) {
        String name = null;

        // checkNotNull() ব্যবহার করে নাম যাচাই করা
        Preconditions.checkNotNull(name, "Name cannot be null");
    }
}

ব্যাখ্যা:

  • এখানে, checkNotNull() মেথডটি নিশ্চিত করে যে নাম (name) null না হয়। যদি এটি null হয়, তাহলে এটি একটি NullPointerException ছোড়ে এবং ত্রুটির বার্তা দেখায়।

আউটপুট:

Exception in thread "main" java.lang.NullPointerException: Name cannot be null

3. checkState() ব্যবহার করা

ধরা যাক, একটি প্রোগ্রামে আমরা একটি অবস্থা যাচাই করতে চাই, যেমন একটি ফ্ল্যাগ চেক করা যে এটি সক্রিয় (active) অবস্থায় রয়েছে কিনা:

import com.google.common.base.Preconditions;

public class InputValidationExample {
    public static void main(String[] args) {
        boolean isActive = false;

        // checkState() ব্যবহার করে অবস্থা যাচাই করা
        Preconditions.checkState(isActive, "The system must be active to perform this operation");
    }
}

ব্যাখ্যা:

  • এখানে, checkState() মেথডটি যাচাই করেছে যে isActive ফ্ল্যাগটি true কিনা। যদি এটি false হয়, তাহলে একটি IllegalStateException ছোড়া হবে।

আউটপুট:

Exception in thread "main" java.lang.IllegalStateException: The system must be active to perform this operation

কেন Preconditions ব্যবহার করা উচিত?

  1. ক্লিন কোড: Preconditions ব্যবহার করে আপনি কোডে ইনপুট ভ্যালিডেশন খুবই পরিষ্কার ও সহজভাবে করতে পারেন।
  2. বাগ কমানো: এর মাধ্যমে ইনপুট যাচাই করলে, আপনি অনেক বড় সমস্যা বা বাগ থেকে বাঁচতে পারবেন।
  3. স্মার্ট ব্যতিক্রম (Exception) হ্যান্ডলিং: Preconditions মেথডের মাধ্যমে আপনার ইনপুট যাচাই করার সময় যে ব্যতিক্রমটি ছোড়া হয়, তা সহজে হ্যান্ডল করা যায়।

Guava লাইব্রেরির Preconditions ক্লাস ইনপুট ভ্যালিডেশনের জন্য একটি খুবই শক্তিশালী এবং কার্যকরী টুল সরবরাহ করে। এটি বিভিন্ন শর্ত যাচাই করতে সাহায্য করে, যেমন আর্গুমেন্ট যাচাই, null চেক, অবস্থা যাচাই ইত্যাদি। এই ক্লাসটি ব্যবহার করে আপনি আপনার কোডের মান বজায় রাখতে পারবেন এবং ইনপুট সম্পর্কিত ত্রুটিগুলি সহজেই ধরতে পারবেন।

Content added By

Validators এর সাথে Preconditions এর সমন্বয়

121
121

গুয়াভা (Guava) লাইব্রেরি Validators এবং Preconditions ক্লাসগুলোর মাধ্যমে ইনপুট ভ্যালিডেশন এবং ভ্যালিডেশন ফেইল হওয়া অবস্থায় উপযুক্ত ত্রুটি জানানোর প্রক্রিয়াটিকে অনেক সহজ এবং কার্যকরী করে তোলে। যেখানে Preconditions ইনপুট চেক করার জন্য সহজ এবং দ্রুত একটি পদ্ধতি সরবরাহ করে, সেখানে Validators আরও বিস্তারিত ও কাস্টম চেকিংয়ের সুযোগ দেয়।

Preconditions এবং Validators এর মধ্যে সমন্বয় ব্যবহারের মাধ্যমে আপনি কোডের স্থিতিশীলতা, নিরাপত্তা, এবং পাঠযোগ্যতা বৃদ্ধি করতে পারেন।

Preconditions এর ধারণা

Preconditions ক্লাসটি গুয়াভা লাইব্রেরির একটি গুরুত্বপূর্ণ অংশ, যা ইনপুট ভ্যালিডেশন এবং প্রোগ্রাম চালানোর শর্ত যাচাই করার জন্য ব্যবহৃত হয়। এটি আপনার কোডে শর্তগুলির যথাযথতা নিশ্চিত করে এবং শর্ত পূর্ণ না হলে একটি ত্রুটি ছুড়ে দেয়। প্রধানত এটি checkArgument(), checkNotNull(), checkState() ইত্যাদি মেথড দ্বারা কাজ করে।

Validators এর ধারণা

Validators সাধারণত জাভা প্রোগ্রামগুলিতে ইনপুট যাচাই বা মান যাচাই করার জন্য ব্যবহৃত হয়। এটি বিশেষ করে জটিল বা কাস্টম ভ্যালিডেশন চেক করার জন্য উপযোগী। এই প্রক্রিয়া ইনপুট বা ডেটার মান যাচাই করে এবং যে কোনও ভুল বা অযাচিত মান চিহ্নিত করতে সাহায্য করে।

Validators এবং Preconditions এর সমন্বয়

আপনি যখন Preconditions এবং Validators একসঙ্গে ব্যবহার করবেন, তখন আপনি প্রোগ্রামের মান যাচাই করতে দ্রুত এবং সহজ পদ্ধতি পাবেন। Preconditions ইনপুটের প্রাথমিক ভ্যালিডেশন নিশ্চিত করতে পারে এবং তারপর Validators আরো বিস্তারিত বা কাস্টম ভ্যালিডেশন চেক করতে পারে।

উদাহরণ: Preconditions এবং Validators একসঙ্গে ব্যবহার

ধরা যাক, আপনি একটি ইউজার রেজিস্ট্রেশন ফর্ম তৈরি করছেন যেখানে ইউজার নাম, বয়স এবং ইমেইল প্রদান করবে। আপনি Preconditions.checkNotNull() দিয়ে প্রাথমিক চেক করতে পারেন এবং তারপর Validators ব্যবহার করে আরও গভীর ভ্যালিডেশন করবেন।

import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import com.google.common.collect.Iterables;

public class GuavaValidationExample {

    public static void main(String[] args) {
        String name = "John Doe";
        Integer age = 25;
        String email = "johndoe@example.com";
        
        // Preconditions দ্বারা প্রাথমিক ভ্যালিডেশন
        Preconditions.checkNotNull(name, "Name cannot be null");
        Preconditions.checkArgument(age >= 18, "Age must be 18 or older");
        
        // কাস্টম ভ্যালিডেশন: নামের জন্য খালি স্ট্রিং অনুমোদিত নয়
        validateName(name);
        
        // কাস্টম ভ্যালিডেশন: ইমেইল ঠিক আছে কিনা
        validateEmail(email);
        
        System.out.println("User registration successful!");
    }

    // কাস্টম ভ্যালিডেশন: নাম চেক করা
    public static void validateName(String name) {
        Preconditions.checkArgument(!Strings.isNullOrEmpty(name), "Name cannot be empty or null");
    }

    // কাস্টম ভ্যালিডেশন: ইমেইল ঠিক আছে কিনা
    public static void validateEmail(String email) {
        Preconditions.checkArgument(email.contains("@"), "Invalid email address");
    }
}

ব্যাখ্যা

  1. Preconditions.checkNotNull(name, "Name cannot be null"):
    • এটি নিশ্চিত করে যে name ফিল্ডটি নাল নয়। যদি এটি নাল হয়, তাহলে একটি NullPointerException ছুড়ে দেবে।
  2. Preconditions.checkArgument(age >= 18, "Age must be 18 or older"):
    • এটি নিশ্চিত করে যে age 18 বা তার চেয়ে বেশি। যদি এটি কম হয়, তাহলে একটি IllegalArgumentException ছুড়ে দেবে।
  3. validateName(name):
    • এই কাস্টম ফাংশনটি চেক করে যে name ফিল্ডটি খালি নয়। যদি খালি বা নাল হয়, তবে একটি IllegalArgumentException ছুড়ে দেবে।
  4. validateEmail(email):
    • এটি চেক করে যে email ফিল্ডে একটি বৈধ ইমেইল ঠিকানা রয়েছে কিনা, অর্থাৎ ইমেইলে "@” সিম্বল থাকতে হবে। যদি এটি না থাকে, তবে একটি IllegalArgumentException ছুড়ে দেবে।

কাস্টম ভ্যালিডেশন মেথড

যতটা সম্ভব Preconditions ব্যবহার করে সহজ ভ্যালিডেশন করা ভাল, কিন্তু যখন আপনার প্রয়োজন আরও জটিল বা কাস্টম ভ্যালিডেশন, তখন আপনি কাস্টম মেথড ব্যবহার করতে পারেন।

উদাহরণস্বরূপ:

public class CustomValidators {

    // একটি নম্বরের সঠিকতা যাচাই
    public static boolean isValidPhoneNumber(String phoneNumber) {
        return phoneNumber.matches("^[0-9]{10}$");  // নিশ্চিত করুন যে এটি 10 ডিজিটের নম্বর
    }
}

এখানে isValidPhoneNumber মেথডটি চেক করবে যে ফোন নম্বরটি সঠিক ফরম্যাটে আছে কিনা। আপনি এমন কাস্টম চেকিং করতে চাইলে Preconditions এর সাথে এটি সংযুক্ত করতে পারেন।


গুয়াভা লাইব্রেরির Preconditions এবং Validators একসঙ্গে ব্যবহারের মাধ্যমে আপনি ইনপুট যাচাই এবং ভ্যালিডেশন প্রক্রিয়াগুলোকে আরও কার্যকর এবং স্থিতিশীল করতে পারবেন। Preconditions ফাস্ট ইনপুট চেক করতে সাহায্য করে এবং Validators কাস্টম ভ্যালিডেশন এবং আরও বিস্তারিত চেক করার জন্য ব্যবহৃত হয়। এই দুইটি একসঙ্গে ব্যবহার করলে আপনার প্রোগ্রামের নিরাপত্তা এবং স্থিতিশীলতা নিশ্চিত হবে।

Content added By

Custom Validators তৈরি করা

119
119

Guava লাইব্রেরিতে বিভিন্ন validation সম্পর্কিত সরঞ্জাম পাওয়া যায়, কিন্তু কখনো কখনো ডেভেলপারদের কাস্টম ভ্যালিডেশন লজিক প্রয়োগ করার প্রয়োজন পড়ে। Guava লাইব্রেরি Preconditions এবং Validation এর মতো টুল সরবরাহ করে, যা দিয়ে আপনি সহজেই কাস্টম ভ্যালিডেটর তৈরি করতে পারেন।

কাস্টম ভ্যালিডেটর তৈরি করার মাধ্যমে আপনি নিজস্ব শর্ত বা নিয়ম অনুসারে ইনপুট ভ্যালিডেশন করতে পারেন, যা গ্যাস্ট বা প্লাগঅ্যাবল হয়ে কাজ করবে।


কাস্টম ভ্যালিডেটর তৈরি করার উপায়

Guava লাইব্রেরি Preconditions ক্লাস এবং Java Bean Validation API (যেমন @NotNull, @Size, ইত্যাদি) ব্যবহার করে কাস্টম ভ্যালিডেটর তৈরি করা যেতে পারে। আমরা এখানে Preconditions এর মাধ্যমে কাস্টম ভ্যালিডেটর তৈরি করার একটি উদাহরণ দেখব।


Preconditions ক্লাসে কাস্টম ভ্যালিডেটর

Guava লাইব্রেরির Preconditions ক্লাসটি সাধারণত প্রি-কন্ডিশন চেক করার জন্য ব্যবহৃত হয়, কিন্তু এটি কাস্টম কন্ডিশন চেকের জন্যও ব্যবহার করা যেতে পারে। আপনার প্রয়োজন অনুযায়ী আপনি শর্ত ঠিক করতে পারেন এবং তাতে যদি কিছু ভুল হয়, তবে IllegalArgumentException বা অন্যান্য ত্রুটি ছোড়া যায়।

কাস্টম ভ্যালিডেটর উদাহরণ

এখানে একটি কাস্টম ভ্যালিডেটর তৈরি করা হয়েছে যা সুনির্দিষ্ট শর্তে ইনপুট ভ্যালু যাচাই করে এবং ত্রুটি ছোড়ে:

import com.google.common.base.Preconditions;

public class CustomValidatorExample {
    
    // Custom validator to check if a string is not empty and has a minimum length
    public static void validateUsername(String username) {
        // Validate that the username is not null or empty
        Preconditions.checkArgument(username != null && !username.isEmpty(), "Username cannot be null or empty.");
        
        // Validate that the username has at least 5 characters
        Preconditions.checkArgument(username.length() >= 5, "Username must be at least 5 characters long.");
    }

    public static void main(String[] args) {
        try {
            // Validate a username
            validateUsername("john");
        } catch (IllegalArgumentException e) {
            System.out.println("Error: " + e.getMessage());
        }
        
        try {
            // Validate another username
            validateUsername("johndoe");
            System.out.println("Username is valid.");
        } catch (IllegalArgumentException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

আউটপুট

Error: Username must be at least 5 characters long.
Username is valid.

কাস্টম ভ্যালিডেটর তৈরির অন্যান্য উদাহরণ

কাস্টম ইমেইল ভ্যালিডেটর

import com.google.common.base.Preconditions;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmailValidator {

    // Validate email using regular expression
    public static void validateEmail(String email) {
        // Validate if email is not null or empty
        Preconditions.checkArgument(email != null && !email.isEmpty(), "Email cannot be null or empty.");
        
        // Regular expression to validate email format
        String emailRegex = "^[A-Za-z0-9+_.-]+@(.+)$";
        Pattern pattern = Pattern.compile(emailRegex);
        Matcher matcher = pattern.matcher(email);
        
        // Check if email matches the regular expression
        Preconditions.checkArgument(matcher.matches(), "Invalid email format.");
    }

    public static void main(String[] args) {
        try {
            validateEmail("invalid-email");
        } catch (IllegalArgumentException e) {
            System.out.println("Error: " + e.getMessage());
        }

        try {
            validateEmail("valid@example.com");
            System.out.println("Email is valid.");
        } catch (IllegalArgumentException e) {
            System.out.println("Error: " + e.getMessage());
        }
    }
}

আউটপুট

Error: Invalid email format.
Email is valid.

Guava-এর Validator তৈরি করার অন্যান্য উপায়

1. Custom Annotations ব্যবহার করে (Bean Validation)

Guava লাইব্রেরির সাথে আপনি Java Bean Validation API (JSR 303) ব্যবহার করে কাস্টম ভ্যালিডেটর তৈরি করতে পারেন, যেখানে আপনি @Constraint অ্যানোটেশন এবং ConstraintValidator ব্যবহার করতে পারেন।

import javax.validation.Constraint;
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Payload;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

// Custom annotation
@Constraint(validatedBy = AgeValidator.class)
@Target({ ElementType.FIELD, ElementType.METHOD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidAge {
    String message() default "Invalid age";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

// Validator implementation
class AgeValidator implements ConstraintValidator<ValidAge, Integer> {

    @Override
    public void initialize(ValidAge constraintAnnotation) {}

    @Override
    public boolean isValid(Integer age, ConstraintValidatorContext context) {
        // Check if age is greater than or equal to 18
        return age != null && age >= 18;
    }
}

// Using custom annotation
public class CustomValidatorExample {
    @ValidAge
    private Integer age;

    public static void main(String[] args) {
        CustomValidatorExample example = new CustomValidatorExample();
        example.age = 16;
        // Perform validation (this needs a validation framework like Hibernate Validator)
    }
}

2. Custom Exception Handling

কাস্টম ভ্যালিডেটর ব্যবহার করার সময় আপনি নিজস্ব ত্রুটি বার্তা প্রদান করতে পারেন, যা ব্যবহারকারীদের জন্য আরও স্পষ্ট এবং অর্থবোধক হবে।


Guava কাস্টম ভ্যালিডেটরের সুবিধা

  1. সহজ এবং কার্যকরী: Guava এর Preconditions ক্লাস দিয়ে খুব সহজে কাস্টম ভ্যালিডেশন লজিক প্রয়োগ করা যায়।
  2. ভাল ত্রুটি বার্তা: কাস্টম ত্রুটি বার্তা সরবরাহ করে আপনি ইনপুট যাচাইয়ের সময় ব্যবহারকারীদের পরিষ্কার বার্তা দিতে পারেন।
  3. নির্ভরযোগ্য এবং রক্ষণাবেক্ষণযোগ্য: Guava লাইব্রেরির কাস্টম ভ্যালিডেটর কোড সহজে রক্ষণাবেক্ষণযোগ্য এবং নির্ভরযোগ্য।

Guava কাস্টম ভ্যালিডেটরের সীমাবদ্ধতা

  1. কিছু সীমিত ভ্যালিডেশন: Guava লাইব্রেরি কিছু প্রাথমিক ভ্যালিডেশন সুবিধা প্রদান করলেও, অধিক জটিল ভ্যালিডেশনের জন্য অন্যান্য লাইব্রেরি (যেমন Hibernate Validator) ব্যবহার করা হতে পারে।
  2. অতিরিক্ত ডিপেনডেন্সি: Guava লাইব্রেরি ব্যবহার করলে আপনার প্রকল্পে অতিরিক্ত ডিপেনডেন্সি যুক্ত হয়।

Guava লাইব্রেরির মাধ্যমে কাস্টম ভ্যালিডেটর তৈরি করে আপনি সহজে ইনপুট ভ্যালিডেশন করতে পারেন, যা আপনার কোডের গুণগত মান বাড়ায় এবং ত্রুটি চেকিংয়ের প্রক্রিয়াকে আরও কার্যকর করে তোলে।

Content added By

Input Validation এর Best Practices

141
141

Guava লাইব্রেরি input validation এর জন্য শক্তিশালী এবং কার্যকরী পদ্ধতি সরবরাহ করে। Java প্রোগ্রামিংয়ে ইনপুট যাচাইয়ের জন্য Guava-এর Preconditions ক্লাসটি খুবই জনপ্রিয়, যা কোডে শর্ত যাচাই করার একটি নিরাপদ এবং সহজ পদ্ধতি প্রদান করে। এটি প্রোগ্রামে null checks, range checks, এবং অন্যান্য বিভিন্ন শর্ত যাচাই করার জন্য ব্যবহৃত হয়।

এখানে Guava-র ইনপুট ভ্যালিডেশন ব্যবহারের জন্য কিছু best practices আলোচনা করা হলো:


১. Preconditions এর ব্যবহার

Guava এর Preconditions ক্লাসটি ইনপুট যাচাইয়ের জন্য খুবই কার্যকরী। এটি ইনপুটের শর্ত পরীক্ষা করে এবং যদি কোনো শর্ত ভঙ্গ হয়, তাহলে একটি RuntimeException বা নির্দিষ্ট Exception নিক্ষেপ করে।

checkArgument()

এই মেথডটি ব্যবহারকারীর আর্গুমেন্ট চেক করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে আর্গুমেন্টটি সঠিক শর্তের মধ্যে পড়ে।

import com.google.common.base.Preconditions;

public class InputValidationExample {
    public static void main(String[] args) {
        int age = -5;
        Preconditions.checkArgument(age > 0, "Age must be positive: %s", age);
    }
}

Best Practice: যখন কোনো আর্গুমেন্টের মান অনুমোদিত সীমার বাইরে চলে যায়, তখন checkArgument() ব্যবহার করুন, যেমন এখানে age মানটি নেতিবাচক হলে এটি একটি IllegalArgumentException ছুঁড়ে দেবে।


২. Null Checking এর জন্য checkNotNull()

checkNotNull() মেথডটি null চেক করতে ব্যবহৃত হয় এবং এটি নিশ্চিত করে যে কোনো ভ্যালু null নয়।

import com.google.common.base.Preconditions;

public class NullCheckExample {
    public static void main(String[] args) {
        String name = null;
        Preconditions.checkNotNull(name, "Name cannot be null");
    }
}

Best Practice: যদি আপনি কোনো অবজেক্ট বা ভ্যালু ব্যবহার করতে চান, এবং তা null হতে পারবে না, তবে checkNotNull() ব্যবহার করুন। এটি আপনার কোডে null pointer exceptions থেকে রক্ষা করবে।


৩. State Validation এর জন্য checkState()

checkState() মেথডটি একটি অবজেক্টের বর্তমান অবস্থা যাচাই করতে ব্যবহৃত হয়। এটি নিশ্চিত করে যে অবজেক্টটি একটি সঠিক অবস্থায় আছে, যাতে এর পরবর্তী ব্যবহারটি সম্ভব হয়।

import com.google.common.base.Preconditions;

public class StateValidationExample {
    private boolean isStarted = false;

    public void start() {
        Preconditions.checkState(!isStarted, "Service is already started");
        isStarted = true;
    }
}

Best Practice: যখন কোনো অবজেক্ট বা সিস্টেম একটি নির্দিষ্ট অবস্থায় না থাকলে, তখন checkState() ব্যবহার করুন। উদাহরণস্বরূপ, যদি কোনো সার্ভিস ইতিমধ্যে শুরু হয়ে থাকে, তবে এটি পুনরায় শুরু হওয়া থেকে রোধ করতে পারেন।


৪. Range Validation এর জন্য checkArgument()

Guava এর checkArgument() মেথডটি range validation এর জন্যও ব্যবহার করা যায়, যেখানে একটি মান সীমার মধ্যে পড়ছে কিনা তা নিশ্চিত করতে হয়।

import com.google.common.base.Preconditions;

public class RangeValidationExample {
    public static void main(String[] args) {
        int score = 105;
        Preconditions.checkArgument(score >= 0 && score <= 100, "Score must be between 0 and 100: %s", score);
    }
}

Best Practice: যখন কোনো মান একটি নির্দিষ্ট পরিসীমার মধ্যে পড়তে হবে, তখন checkArgument() ব্যবহার করুন, যেমন এখানে score ০ থেকে ১০০ এর মধ্যে থাকতে হবে।


৫. Custom Error Messages ব্যবহার করা

Guava-তে Preconditions ক্লাসের সকল মেথডে custom error message প্রদান করা যায়, যা ডিবাগিং এবং সমস্যা সমাধানে সহায়ক।

import com.google.common.base.Preconditions;

public class CustomErrorMessageExample {
    public static void main(String[] args) {
        String password = "123";
        Preconditions.checkArgument(password.length() >= 6, "Password must be at least 6 characters long: %s", password);
    }
}

Best Practice: Preconditions ব্যবহার করার সময় custom error messages ব্যবহার করুন যাতে ব্যবহারকারী বা ডেভেলপার বুঝতে পারে কোন শর্ত ভঙ্গ হয়েছে এবং কেন এটি ঘটেছে।


৬. Avoiding Redundant Checks

অপর্যাপ্ত বা redundant checks পরিহার করা উচিত। Preconditions ক্লাস ব্যবহারে একাধিক একই ধরণের চেক পুনরায় করতে যাবেন না, যেগুলি ইতিমধ্যে অন্য মেথডে চেক হয়েছে।

// Bad Practice: Redundant checks
Preconditions.checkNotNull(name, "Name cannot be null");
Preconditions.checkArgument(name.length() > 0, "Name must not be empty");

Best Practice: ইনপুট যাচাইয়ের ক্ষেত্রে, যদি আপনি null check বা empty check ইতিমধ্যে করেছেন, তাহলে অন্য কোথাও একই ধরনের চেক করা এড়িয়ে চলুন।


৭. Use of Custom Validation Logic

কখনও কখনও custom validation logic প্রয়োজন হতে পারে যা Guava সরাসরি সমর্থন করে না। এর জন্য আপনি নিজের কাস্টম শর্ত তৈরি করে তা checkArgument() বা checkState() এর মধ্যে ব্যবহার করতে পারেন।

import com.google.common.base.Preconditions;

public class CustomValidationExample {
    public static void main(String[] args) {
        String username = "admin123";
        Preconditions.checkArgument(username.matches("^[a-zA-Z0-9]+$"), "Username must be alphanumeric: %s", username);
    }
}

Best Practice: যখন আপনার ইনপুটের জন্য বিশেষ ধরনের শর্ত প্রয়োজন (যেমন regex চেক), তখন custom validation logic ব্যবহার করতে পারেন।


৮. Efficient Exception Handling

Guava-র Preconditions ক্লাস exceptions দ্রুত এবং দক্ষভাবে ফেলে, যা কোডের পারফরম্যান্স উন্নত করতে সহায়ক। তবে, যদি আপনি checked exceptions ব্যবহার করছেন, তবে সেগুলিকে try-catch ব্লকের মধ্যে হ্যান্ডেল করুন।

import com.google.common.base.Preconditions;
import java.io.IOException;

public class EfficientExceptionHandling {
    public static void main(String[] args) {
        try {
            Preconditions.checkArgument(false, "This will throw an exception");
        } catch (IllegalArgumentException e) {
            System.out.println("Handled exception: " + e.getMessage());
        }
    }
}

Best Practice: Preconditions ব্যবহারের মাধ্যমে exceptions হ্যান্ডলিং সহজ করুন এবং ভুল ইনপুটের কারণে পোগ্রাম ক্র্যাশ হওয়া থেকে রক্ষা করুন।


সারাংশ

Guava লাইব্রেরি Preconditions ক্লাসের মাধ্যমে input validation সহজ ও কার্যকরী করা যায়। এটি কোডে null checks, range validation, state validation, এবং custom validations করতে সহায়ক। Best practices অনুসরণ করলে আপনার কোড নিরাপদ, পরিষ্কার, এবং রক্ষণাবেক্ষণে সহজ হবে। Preconditions ব্যবহার করার সময় কাস্টম এরর মেসেজ এবং উপযুক্ত exceptions নিক্ষেপ করা নিশ্চিত করুন।

Content added By
Promotion